←
▼
▲
Sub DoTextShrink( TxMxFilePath as string, Option as Empty )
セクション(NaturalDocs で区切ったソース ファイル)のうち、使用していないセクションを削除します。
【引数】
TxMxFilePath
Option
編集するファイルなどが記述された .txmx ファイルのパス(下記)
Empty を指定してください
テスト
→ T_TextSection.vbs
T_TextShrink
ListUpTextShrinkKeywords
TxMxClass
(src)
DoTextShrink
(src)
ListUpUsingTxMxKeywords
vbs(src)
MakeShrinkedSectionsFile
(src)
ListUpUsingTxMxKeywords
c(src)
DoTextMix
vbs(src)
c(src)
TxMxListUp_listUpUsedNames
c(src)
TxMxListUp_readSetting
T_MakeTxScFile
MakeNaturalComments_C_Language
NaturalCommentClass
→ T_TextShrink フォルダー
ソース
→ ToolsLib.vbs
関連
←
▼
▲
CSV 形式の1行を解析して、それぞれの項目を配列に格納します。
Function ArrayFromCSV( a_CSV as string ) as Array of string
For Each column In ArrayFromCSV( "ABC , DEF" )
Next
【引数】
a_CSV
返り値
CSV 形式の1行
(出力)CSV の項目が入った配列
関連
各項目の両端の空白が削除されたものが戻ります。
項目の端に空白文字がある場合と、項目の中にコンマやダブルクォーテーション(")が
あるときは、" " で囲んでください。 ただし、ダブルクォーテーション1文字あたり、
ダブルクォーテーションを2つ並べてください。
→ T_CSV.vbs # ArrayFromCSV
テスト
(src)
Function ArrayFromCSV_Int( a_CSV as string ) as Array of integer
上記 ArrayFromCSV の返り値は、Array( "ABC", "DEF" )
ABC , DEF
A, " ""ABC,"" "
A
"ABC,"
CSV:
各項目:
VBS:
ArrayFromCSV( "A, "" """"ABC,"""" """ )
CSV とは別に、VBS も同様に " 文字は " を2つ並べる
"A, ,C" の真ん中の要素のように、何も無いときは、配列の要素が Empty になります。
"A, " のように最後がコンマのときは、配列の最後の要素が Empty になります
" " のように、空白文字や空文字列のときは、配列要素数が 0 になります。
ArrayFromCSV( "A,,C" ) = Array( "A", Empty, "C" )
ArrayFromCSV( "A," ) = Array( "A", Empty )
要素に "" (ダブルクオーテーション2つだけ)が指定されたときは、空文字列になります。
ArrayFromCSV( "A, """"" ) = Array( "A", "" )
ArrayFromCSV( " " ) = Array( )
複数行の文字列を指定するときは、最後の行以外の行末を "," にしてください。
ArrayFromCSV( "A, B," +vbCRLF+ "C, D," +vbCRLF+ "E, F" )
= Array( "A","B","C","D","E","F" )
A, B,
C, D,
E, F
つまり
=
A, B, C, D, E, F
サンプル
性能について
本関数は処理が遅いです。
CSV ファイルのデータは、1行に対応するクラスの配列にキャッシュしておくと速くなります。
paths = ArrayFromCSV( Replace( Trim2( multi_line_string ), vbCRLF, "," ) )
サンプル
複数行の文字列から、各行を配列にする
←
▼
▲
For Each column In ArrayFromOrPipe( Array( "*.txt | ""A *.log""", "*.xml" ) )
Next
| で区切られた文字列を解析して、それぞれの項目を配列に格納します。
Function ArrayFromOrPipe( in_OrPipedString as string or array of string ) as Array of string
For Each column In ArrayFromOrPipe( "ABC | DEF" )
Next
【引数】
in_OrPipedString
返り値
| または , で区切られた文字列、または、その配列
(出力) 文字列の配列
上記 ArrayFromOrPipe の返り値は、Array( "ABC", "DEF" )
ABC | DEF
サンプル
→ vbslib.vbs
ソース
とほぼ同じですが、コンマだけでなく | も区切り記号として処理します。
"*.txt | ""A *.log""", "*.xml"
上記 ArrayFromOrPipe の返り値は、Array( "*.txt", "A *.log", "*.xml" )
サンプル
テスト
→ T_Wildcard.vbs
T_ArrayFromWildcard1
T_ArrayFromWildcard2
←
▼
▲
Function CSVFrom( a_Array as array ) as string
配列を CSV 形式に変換します。
【引数】
a_Array
返り値
配列
CSV 形式文字列
ソース
→ T_CSV.vbs
テスト
→ vbslib.vbs
←
▼
▲
Function CSVText( s as string ) as string
CSV の1項目に変換します。
サンプル
s = CSVText( "a,b" )
s は、"""a,b""" という1つの値になります。
a と b という2つの値ではありません。
s = ""
For Each t In Array( "a", "b" )
If s <> "" Then s = s + ", "
s = s + CSVText( t )
Next
サンプル
CSV の1行を作成します
→ T_CSV.vbs
ソース
テスト
→ vbslib.vbs
←
▼
▲
CSV 形式の1項目を取り出し、通常の文字列に戻す。
Function MeltCSV( Line as string, in_out_Start as integer ) as string
i = 1
Do
s = MeltCSV( line, i )
If not IsEmpty( s ) Then (s を使った処理)
If i = 0 Then Exit Do
Loop
【引数】
Line
in_out_Start
CSV 形式の1行
(入力) 取り出しを開始する文字の位置、(出力)次に取り出す〜
返り値
取り出した CSV 形式の1項目。Empty=項目に値が無い
サンプル
(src)
関連
各項目の両端の空白が削除されたものが戻ります。
次の項目が無いときは、i=0 になります。
i=0 を渡すと、Empty を返します。
→ T_CSV.vbs # main
テスト
←
▼
▲
→ T_CSV.vbs
ソース
Function CSV_insert( CSV_Line as string, RightColumnNum0 as integer, Element as variant )
as string
CSV 形式の1行に、要素を挿入します。
【引数】
CSV_Line
RightColumnNum0
CSV 形式の1行
挿入する位置の右の要素の番号(0以上)
テスト
→ vbslib.vbs
挿入した後の CSV 形式の1行
挿入する要素
Element
返り値
サンプル
Assert CSV_insert( "A,B,C", 1, "x" ) = "A,x,B,C"
Assert CSV_insert( "A,B,C", 4, "x" ) = "A,B,C,,x"
←
▼
▲
→ T_CSV.vbs
ソース
Function CSV_set( CSV_Line as string, ColumnNum0 as integer, Element as variant )
as string
CSV 形式の1つの要素を上書きします。
【引数】
CSV_Line
ColumnNum0
CSV 形式の1行
上書きする要素の番号(0以上)
テスト
→ vbslib.vbs
上書きした後の CSV 形式の1行
上書きする要素
Element
返り値
サンプル
Assert CSV_set( "A,B,C", 1, "x" ) = "A,x,C"
Assert CSV_set( "A,B,C", 4, "x" ) = "A,B,C,,x"
←
▼
▲
→ T_CSV.vbs
ソース
Function CSV_remove( CSV_Line as string, ColumnNum0 as integer ) as string
CSV 形式の1つの要素を削除します。
【引数】
CSV_Line
ColumnNum0
CSV 形式の1行
削除する要素の番号(0以上)
テスト
→ vbslib.vbs
削除した後の CSV 形式の1行
返り値
サンプル
Assert CSV_remove( "A,B,C", 1 ) = "A,C"
Assert CSV_remove( "A,B,C", 4 ) = "A,B,C,"
Assert CSV_remove( "A,B,C,", 3 ) = "A,B,C"
削除する要素より前の要素が無いときは、前に空の要素が追加されます
←
▼
▲
(src)
Function LoadXML( PathOrStr as string, Opt as variant ) as IXMLDOMElement
XML ファイル、または XML 形式の文字列を読み込みます。
【引数】
PathOrStr
XML ファイルのパス、または XML 形式文字列や
Opt
オプション(下記)
IXMLDOMElement
XML のルート要素
返り値
F_NoRoot フラグ、g_VBS_Lib.NoRootXML
XML のルート要素が無い XML を読み込みます。 返り値は、内部で自動的に
加えられたルート要素 <Dummy_Root_> になります。
先頭が < でないときは、自動的にルート要素が加えられます。
F_Str フラグ、g_VBS_Lib.StringData
PathOrStr 引数を XML 形式文字列として処理します
サンプル: XML 形式文字列を展開する
Dim s : s = "ABC <TAG1 attr='value1'/> 123"
Dim root : Set root = LoadXML( s, F_NoRoot or F_Str )
Dim value : value = root.selectSingleNode( "./TAG1" ).getAttribute( "attr" )
'// value = "value1"
関連
LoadXML
Dim root, elem, attr
Set root = LoadXML( "sample.xml", Empty )
'//=== read 1 attribute value
WScript.Echo root.selectSingleNode( "./Tests/Test" ).getAttribute( "result" )
'//=== read 1 text value
WScript.Echo root.selectSingleNode( "./Tests" ).text
Set node = root.selectSingleNode( "./Tests/text()" )
If not node is Nothing Then WScript.Echo node.nodeValue
'//=== loop each tags
For Each elem In root.selectNodes( "./Tests/Test" )
WScript.Echo "result, "+ elem.getAttribute( "result" )
Next
Set nodes = root.selectNodes( "./Tests" )
ReDim values( nodes.length - 1 )
For i=0 To UBound( values )
values(i) = nodes(i).text
Next
'//=== loop each attributes
For Each elem In root.selectNodes( ".//Test" )
WScript.Echo "<" + elem.tagName + ">"
For Each attr In elem.attributes
WScript.Echo attr.name + "=" + attr.value
Next
Next
"sample.xml"
"./Tests/Test"
"./Tests/Test"
"result"
"result"
".//Test"
result
→ DOM サンプル
LoadXML
日本語があるときは、Unicode にするか、XML宣言で Shift-JIS を指定してください。
→ XmlFilter ツール (.zip)
テスト
→ T_XML フォルダー
サンプル: XML を結合する
Dim f, root, elem, attr
Set f = OpenForWrite( "FileAB.xml", Empty )
f.WriteLine "<TabA>"
Set root = LoadXML( "FileA.xml", Empty )
f.WriteLine XmlTags( root.selectSingleNode( "./TagB" ).xml, 1 )
Set root = LoadXML( "FileB.xml", Empty )
f.WriteLine XmlTags( root.selectSingleNode( "./TagB" ).xml, 1 )
f.WriteLine "</TabA>"
→ XML
参考
./Tests/text()
関連
selectSingleNode
selectNodes
getAttribute
SuperClass タグの属性を子タグにコピーして、id 属性を持たない SuperClass タグを
削除した XML データを返します。 super_class 属性を持つタグは、super_class 属性が
指す id 属性を持つ SuperClass タグの属性をコピーします。
参考: T_InheritSuperClassXML テスト
<SuperClass priority="1000">
<File path="*.c"/>
<File path="*.h"/>
</SuperClass>
<SuperClass priority="2000" id="Super1"/>
<File path="*.cpp" super_class="#Super1"/>
<File path="*.c" priority="1000"/>
<File path="*.h" priority="1000"/>
<SuperClass priority="2000" id="Super1"/>
<File path="*.cpp" super_class="#Super1" priority="2000"/>
FileA.xml ファイル
LoadXML の返り値の XML
←
▼
▲
XML ファイルの内容を内部でキャッシュします。
関連
←
▼
▲
Default Property Get XML_ReadCacheClass::Item( URL as string ) as string
XML のテキスト、または、属性値を返します。
【引数】
URL
返り値
XML ファイルのパス +"#"+ XPath
XML のテキスト、または、属性値
サンプル
→ vbslib.vbs
ソース
Set files = new XML_ReadCacheClass
tag_text = files( "Sample.xml#/Root/Tag" )
'// tag_text = "The text"
Sample.xml#/Root/Tag
Sample.xml
VBScript
<Root>
<Tag>The text</Tag>
</Root>
→ T_XML.vbs # [T_XML_ReadCacheClass]
テスト
←
▼
▲
Function LoadXML_Cached( PathOrStr as string, Opt as variant ) as IXMLDOMElement
IXMLDOMElement
XML を解析してできた DOM オブジェクトをキャッシュする
。
返り値がどの変数から参照されなくなっても、キャッシュのために、DOM オブジェクトはメモリー上に
残ります。 vbslib の内部に絶対パスをキー、DOM オブジェクトをアイテムとした辞書型のキャッシュ
があります。
ソース
→ vbslib.vbs
2回目以降の XML ファイルは、キャッシュによって XML を解析する処理がなくなり、高速に処理
します。
関連
←
▼
▲
関連
Function OpenForReplaceXML( SrcPath as string, DstPath as string ) as ReplaceXmlFile1
XMLファイルの内容の変更を開始します。
【引数】
SrcPath
DstPath
変更前のテキストファイルのパス
変更後のテキストファイルのパス。 SrcPath と同じ、または Empty 可。
返り値
Set xml = OpenForReplaceXML( "file1.xml", Empty )
xml.Write "/Root/Elem/@attr1", 11
xml.IsUserConfirm = True
xml = Empty '// デストラクタでユーザーの確認およびファイルの更新をする
file1.xml
/Root/Elem/@attr1
11
テスト
→ T_XML.vbs # [T_OpenForReplaceXML]
タグの間のテキスト、または XML 属性の値を変更します。
XML ファイルを変更する前に、ユーザーに確認をとるかどうか。
→ T_XML_Manually.vbs # [T_OpenForReplaceXML_Manually]
→ vbslib.vbs
サンプル
ソース
←
▼
▲
Sub ReplaceXmlFile1::Write( XPath as string, Value as string )
→ サンプル
XML のタグの間のテキスト、または XML の属性の値を変更します。
【引数】
XPath
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
変化があったかどうか
変更後のテキストまたは XML 属性の値、""=値なし、Empty=削除する
Value
参考
←
▼
▲
Sub ReplaceXmlFile1::SetXmlAttribute( XPathForXmlElement as string, AttrName as string,
AttrValue as string );
XML 属性の値を変更します。
【引数】
XPathForXmlElement
AttrName
属性を変更する XML 要素(タグ) への XPath。 フル・パス
XML 属性の名前
AttrValue
変更後の XML 属性の値
→ サンプル
廃止されました。
←
▼
▲
Dim ReplaceXmlFile1::IsUserConfirm as boolean
XML ファイルを変更する前に、ユーザーに確認をとるかどうかの設定値。
XML ファイルを更新する直前で、値が変わる属性とその値を表示します。
表示中に、ユーザーの確認入力があるまで待ちます。
デフォルトは、False です。
/Root/Tests/Test1@attr1="1"
/Root/Tests/Test3@attr1="3"
更新ファイル:out.xml
XML ファイルの上記属性を変更します。
続行するには Enter キーを押してください . . .
確認画面の例:
→ サンプル
←
▼
▲
Function OpenForAppendXml( SrcPath as string, DstPath as string ) as AppendXmlFile
XMLファイルの内容の追加を開始します。
【引数】
返り値を使って呼び出せるメソッドは、FileSystemObject::OpenTextFile と同じですが、
WriteXml メソッドが追加されています。
Modify.xml (処理前)
Modify.xml (処理後)
<Modify>
<Child1 value="1"/>
</Modify>
クローズするときに、ルートの XML タグ(XML要素)を閉じるタグを出力します。
よって、追加する内容は、ルートの XML タグの直下の末尾に限定されます。
Set file = OpenForAppendXml( "Modify.xml", Empty )
file.WriteLine "<Child2 value=""2""/> <!-- by WriteLine -->"
file.WriteXml ReadFile( "Add.xml" )
file = Empty
サンプル
<Modify>
<Child1 value="1"/>
<Child2 value="2"/> <!-- by WriteLine -->
<AddChild value="3"/>
</Modify>
<Add>
<AddChild value="3"/>
</Add>
Add.xml
追加する内容は、OpenForWrite と同様に WriteLine などのメソッドに XML の文字列を
指定します。 XPath ではありません。
テスト
→ T_XML.vbs # [T_OpenForAppendXml]
SrcPath
DstPath
変更前のテキストファイルのパス
変更後のテキストファイルのパス。 SrcPath と同じ、または Empty 可。
返り値
TextStream + α のオブジェクト
(src)
←
▼
▲
Sub AppendXmlFile::WriteXml( Xml as string )
指定した XML 文字列から、ルート XML タグを除いて追加します。
【引数】
Xml
追加する XML 文字列
file.WriteXml "<Root><Child/><Root>"
サンプル
サンプル
OpenForAppendXml( "Modify.xml", Empty ).WriteXml ReadFile( "Add.xml" )
<Child/> を追加します
Modify.xml に Add.xml を追加します。
Modify.xml (処理前)
Modify.xml (処理後)
<Modify>
<Child1 value="1"/>
</Modify>
<Modify>
<Child1 value="1"/>
<AddChild value="2"/>
</Modify>
<Add>
<AddChild value="2"/>
</Add>
Add.xml
(src)